home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-04-21 | 4.0 KB | 136 lines | [TEXT/MPS ] |
- // The C++ Booch Components (Version 2.1)
- // (C) Copyright 1990-1993 Grady Booch. All Rights Reserved.
- //
- // Restricted Rights Legend
- // Use, duplication, or disclosure is subject to restrictions as set forth
- // in subdivision (c)(1)(ii) of the Rights in Technical Data and Computer
- // Software clause at DFARS 252.227-7013.
- //
- // BCSearcV.cpp
- //
- // This file contains the definitions for the vector searching tools.
-
- #include "BCSearcV.h"
-
- template<class Item, class Sequence>
- BC_TSearch<Item, Sequence>::BC_TSearch()
- : fIsEqual(0) {}
-
- template<class Item, class Sequence>
- BC_TSearch<Item, Sequence>::
- BC_TSearch(BC_Boolean (*IsEqual)(const Item& x, const Item& y))
- : fIsEqual(IsEqual) {}
-
- template<class Item, class Sequence>
- BC_TSearch<Item, Sequence>::~BC_TSearch() {}
-
- template<class Item, class Sequence>
- void BC_TSearch<Item, Sequence>::
- SetIsEqualFunction(BC_Boolean (*IsEqual)(const Item& x, const Item& y))
- {
- fIsEqual = IsEqual;
- }
-
- template<class Item, class Sequence>
- BC_TSequentialSearch<Item, Sequence>::BC_TSequentialSearch() {}
-
- template<class Item, class Sequence>
- BC_TSequentialSearch<Item, Sequence>::
- BC_TSequentialSearch(BC_Boolean (*IsEqual)(const Item& x, const Item& y))
- : BC_TSearch<Item, Sequence>(IsEqual) {}
-
- template<class Item, class Sequence>
- BC_TSequentialSearch<Item, Sequence>::~BC_TSequentialSearch() {}
-
- template<class Item, class Sequence>
- BC_ExtendedIndex BC_TSequentialSearch<Item, Sequence>::
- Location(const Sequence& target, const Item& key, BC_Index start)
- {
- for (BC_Index index = start; (index < target.Length()); index++)
- if (fIsEqual(target[index], key))
- return index;
- return -1;
- }
-
- template<class Item, class Sequence>
- BC_TOrderedSearch<Item, Sequence>::BC_TOrderedSearch()
- : fIsLessThan(0) {}
-
- template<class Item, class Sequence>
- BC_TOrderedSearch<Item, Sequence>::
- BC_TOrderedSearch(BC_Boolean (*IsEqual)(const Item& x, const Item& y),
- BC_Boolean (*IsLessThan)(const Item& x, const Item& y))
- : BC_TSearch<Item, Sequence>(IsEqual),
- fIsLessThan(IsLessThan) {}
-
- template<class Item, class Sequence>
- BC_TOrderedSearch<Item, Sequence>::~BC_TOrderedSearch() {}
-
- template<class Item, class Sequence>
- void BC_TOrderedSearch<Item, Sequence>::
- SetIsLessThanFunction(BC_Boolean (*IsLessThan)(const Item& x, const Item& y))
- {
- fIsLessThan = IsLessThan;
- }
-
- template<class Item, class Sequence>
- BC_ExtendedIndex BC_TOrderedSearch<Item, Sequence>::
- Location(const Sequence& target, const Item& key, BC_Index start)
- {
- for (BC_Index index = start; (index < target.Length()); index++) {
- if (fIsEqual(target[index], key))
- return index;
- if (fIsLessThan(key, target[index]))
- return -1;
- }
- return -1;
- }
-
- template<class Item, class Sequence>
- BC_TBinarySearch<Item, Sequence>::BC_TBinarySearch()
- : fIsLessThan(0) {}
-
- template<class Item, class Sequence>
- BC_TBinarySearch<Item, Sequence>::
- BC_TBinarySearch(BC_Boolean (*IsEqual)(const Item& x, const Item& y),
- BC_Boolean (*IsLessThan)(const Item& x, const Item& y))
- : BC_TSearch<Item, Sequence>(IsEqual),
- fIsLessThan(IsLessThan) {}
-
- template<class Item, class Sequence>
- BC_TBinarySearch<Item, Sequence>::~BC_TBinarySearch() {}
-
- template<class Item, class Sequence>
- void BC_TBinarySearch<Item, Sequence>::
- SetIsLessThanFunction(BC_Boolean (*IsLessThan)(const Item& x, const Item& y))
- {
- fIsLessThan = IsLessThan;
- }
-
- template<class Item, class Sequence>
- BC_ExtendedIndex BC_TBinarySearch<Item, Sequence>::
- Location(const Sequence& target, const Item& key, BC_Index start)
- {
- BC_Index lower = start;
- BC_Index upper = target.Length();
- if (!upper)
- return -1;
- else
- --upper;
- while (lower <= upper) {
- BC_Index index = (lower + upper) / 2;
- if (fIsEqual(target[index], key))
- return index;
- if (fIsLessThan(key, target[index])) {
- if (!index)
- return -1;
- upper = index - 1;
- } else {
- if (index == (target.Length() - 1))
- return -1;
- lower = index + 1;
- }
- }
- return -1;
- }
-